--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
sbapp/pyogg/library_loader.py 17c4febc96c145692d730ea3728e7a6d6c363e4e (17c4febc) Text, 4.72 KB
Tff7b72import T7ee787ctypes
Tff7b72import T7ee787ctypesT7ee787.T7ee787util
Tff7b72import T7ee787os
Tff7b72import T7ee787sys
Tff7b72import T7ee787platform
Tff7b72from T7ee787typing Tff7b72import Tb4b4b4(
Te6edf3OptionalTb4b4b4,
Te6edf3DictTb4b4b4,
Te6edf3List
Tb4b4b4)
Te6edf3_here Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffdirnameTb4b4b4(Tff7b72__file__Tb4b4b4)
Tff7b72class T56d364ExternalLibraryErrorTb4b4b4(Tf85149ExceptionTb4b4b4)Tb4b4b4:
Tff7b72pass
Te6edf3architecture Tff7b72= Te6edf3platformTff7b72.Td2a8ffarchitectureTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Te6edf3_windows_styles Tff7b72= Tb4b4b4[Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTffd700{}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTffd700{}Ta5d6ff_dynamicTa5d6ff"Tb4b4b4, Ta5d6ff"Tffd700{}Ta5d6ff_dynamicTa5d6ff"Tb4b4b4]
Te6edf3_other_styles Tff7b72= Tb4b4b4[Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTffd700{}Ta5d6ff"Tb4b4b4]
Tff7b72if Te6edf3architecture Tff7b72== Ta5d6ff"Ta5d6ff32bitTa5d6ff"Tb4b4b4:
Tff7b72for Te6edf3arch_style Tff7b72in Tb4b4b4[Ta5d6ff"Ta5d6ff32bitTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff32Ta5d6ff" Ta5d6ff"Ta5d6ff86Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwin32Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffx86Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_x86Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_32Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_win32Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_32bitTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3style Tff7b72in Tb4b4b4[Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTffd700{}Ta5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3_windows_stylesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3styleTff7b72.Td2a8ffformatTb4b4b4(Ta5d6ff"Tffd700{}Ta5d6ff"Tff7b72+Te6edf3arch_styleTb4b4b4)Tb4b4b4)
Tff7b72elif Te6edf3architecture Tff7b72== Ta5d6ff"Ta5d6ff64bitTa5d6ff"Tb4b4b4:
Tff7b72for Te6edf3arch_style Tff7b72in Tb4b4b4[Ta5d6ff"Ta5d6ff64bitTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff64Ta5d6ff" Ta5d6ff"Ta5d6ff86_64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffamd64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffwin_amd64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffx86_64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_x86_64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_amd64Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff_64bitTa5d6ff"Tb4b4b4]Tb4b4b4:
Tff7b72for Te6edf3style Tff7b72in Tb4b4b4[Ta5d6ff"Tffd700{}Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fflibTffd700{}Ta5d6ff"Tb4b4b4]Tb4b4b4:
Te6edf3_windows_stylesTff7b72.Td2a8ffappendTb4b4b4(Te6edf3styleTff7b72.Td2a8ffformatTb4b4b4(Ta5d6ff"Tffd700{}Ta5d6ff"Tff7b72+Te6edf3arch_styleTb4b4b4)Tb4b4b4)
Te6edf3run_tests Tff7b72= Tff7b72lambda Te6edf3libTb4b4b4, Te6edf3testsTb4b4b4: Tb4b4b4[Te6edf3fTb4b4b4(Te6edf3libTb4b4b4) Tff7b72for Te6edf3f Tff7b72in Te6edf3testsTb4b4b4]
T8b949e# Get the appropriate directory for the shared libraries depending
T8b949e# on the current platform and architecture
Te6edf3platform_ Tff7b72= Te6edf3platformTff7b72.Td2a8ffsystemTb4b4b4(Tb4b4b4)
Te6edf3lib_dir Tff7b72= Tff7b72None
Tff7b72if Te6edf3platform_ Tff7b72== Ta5d6ff"Ta5d6ffDarwinTa5d6ff"Tb4b4b4:
Te6edf3lib_dir Tff7b72= Ta5d6ff"Ta5d6fflibs/macosTa5d6ff"
Tff7b72elif Te6edf3platform_ Tff7b72== Ta5d6ff"Ta5d6ffWindowsTa5d6ff"Tb4b4b4:
Tff7b72if Te6edf3architecture Tff7b72== Ta5d6ff"Ta5d6ff32bitTa5d6ff"Tb4b4b4:
Te6edf3lib_dir Tff7b72= Ta5d6ff"Ta5d6fflibs/win32Ta5d6ff"
Tff7b72elif Te6edf3architecture Tff7b72== Ta5d6ff"Ta5d6ff64bitTa5d6ff"Tb4b4b4:
Te6edf3lib_dir Tff7b72= Ta5d6ff"Ta5d6fflibs/win_amd64Ta5d6ff"
Tff7b72class T56d364LibraryTb4b4b4:
Tf0883e@staticmethod
Tff7b72def Td2a8ffloadTb4b4b4(Te6edf3namesTb4b4b4: Te6edf3DictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4, Te6edf3pathsTb4b4b4: Te6edf3OptionalTb4b4b4[Te6edf3ListTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4] Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3tests Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Te6edf3OptionalTb4b4b4[Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4]Tb4b4b4:
Te6edf3lib Tff7b72= Te6edf3InternalLibraryTff7b72.Td2a8ffloadTb4b4b4(Te6edf3namesTb4b4b4, Te6edf3testsTb4b4b4)
Tff7b72if Te6edf3lib Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ExternalLibraryTff7b72.Td2a8ffloadTb4b4b4(Te6edf3namesTb4b4b4[Ta5d6ff"Ta5d6ffexternalTa5d6ff"Tb4b4b4]Tb4b4b4, Te6edf3pathsTb4b4b4, Te6edf3testsTb4b4b4)
Tff7b72return Te6edf3lib
Tff7b72class T56d364InternalLibraryTb4b4b4:
Tf0883e@staticmethod
Tff7b72def Td2a8ffloadTb4b4b4(Te6edf3namesTb4b4b4: Te6edf3DictTb4b4b4[Tffa657strTb4b4b4, Tffa657strTb4b4b4]Tb4b4b4, Te6edf3testsTb4b4b4) Tff7b72-Tff7b72> Te6edf3OptionalTb4b4b4[Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4]Tb4b4b4:
T8b949e# If we do not have a library directory, give up immediately
Tff7b72if Te6edf3lib_dir Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72return Tff7b72None
T8b949e# Get the appropriate library filename given the platform
Tff7b72tryTb4b4b4:
Te6edf3name Tff7b72= Te6edf3namesTb4b4b4[Te6edf3platform_Tb4b4b4]
Tff7b72except Tf85149KeyErrorTb4b4b4:
Tff7b72return Tff7b72None
T8b949e# Attempt to load the library from here
Te6edf3path Tff7b72= Te6edf3_here Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72+ Te6edf3lib_dir Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72+ Te6edf3name
Tff7b72tryTb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Te6edf3pathTb4b4b4)
Tff7b72except Tf85149OSError Tff7b72as Te6edf3eTb4b4b4:
Tff7b72return Tff7b72None
T8b949e# Check that the library passes the tests
Tff7b72if Te6edf3tests Tff7b72and Tffa657allTb4b4b4(Te6edf3run_testsTb4b4b4(Te6edf3libTb4b4b4, Te6edf3testsTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3lib
T8b949e# Library failed tests
Tff7b72return Tff7b72None
T8b949e# Cache of libraries that have already been loaded
Te6edf3_loaded_librariesTb4b4b4: Te6edf3DictTb4b4b4[Tffa657strTb4b4b4, Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72class T56d364ExternalLibraryTb4b4b4:
Tf0883e@staticmethod
Tff7b72def Td2a8ffloadTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3paths Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3tests Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3name Tff7b72in Te6edf3_loaded_librariesTb4b4b4:
Tff7b72return Te6edf3_loaded_librariesTb4b4b4[Te6edf3nameTb4b4b4]
Tff7b72if Te6edf3sysTff7b72.Td2a8ffplatform Tff7b72== Ta5d6ff"Ta5d6ffwin32Ta5d6ff"Tb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ExternalLibraryTff7b72.Td2a8ffload_windowsTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3pathsTb4b4b4, Te6edf3testsTb4b4b4)
Te6edf3_loaded_librariesTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3lib
Tff7b72return Te6edf3lib
Tff7b72elseTb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ExternalLibraryTff7b72.Td2a8ffload_otherTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3pathsTb4b4b4, Te6edf3testsTb4b4b4)
Te6edf3_loaded_librariesTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3lib
Tff7b72return Te6edf3lib
Tf0883e@staticmethod
Tff7b72def Td2a8ffload_otherTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3paths Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3tests Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff;Ta5d6ff" Tff7b72+ Ta5d6ff"Ta5d6ff;Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tb4b4b4(Te6edf3osTff7b72.Td2a8ffgetcwdTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3_hereTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3pathsTb4b4b4: Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff;Ta5d6ff" Tff7b72+ Ta5d6ff"Ta5d6ff;Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3pathsTb4b4b4)
Tff7b72for Te6edf3style Tff7b72in Te6edf3_other_stylesTb4b4b4:
Te6edf3candidate Tff7b72= Te6edf3styleTff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)
Te6edf3library Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffutilTff7b72.Td2a8fffind_libraryTb4b4b4(Te6edf3candidateTb4b4b4)
Tff7b72if Te6edf3libraryTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Te6edf3libraryTb4b4b4)
Tff7b72if Te6edf3tests Tff7b72and Tffa657allTb4b4b4(Te6edf3run_testsTb4b4b4(Te6edf3libTb4b4b4, Te6edf3testsTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3lib
Tff7b72exceptTb4b4b4:
Tff7b72pass
Tf0883e@staticmethod
Tff7b72def Td2a8ffload_windowsTb4b4b4(Te6edf3nameTb4b4b4, Te6edf3paths Tff7b72= Tff7b72NoneTb4b4b4, Te6edf3tests Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4)Tb4b4b4:
Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff;Ta5d6ff" Tff7b72+ Ta5d6ff"Ta5d6ff;Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Tb4b4b4(Te6edf3osTff7b72.Td2a8ffgetcwdTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3_hereTb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3pathsTb4b4b4: Te6edf3osTff7b72.Td2a8ffenvironTb4b4b4[Ta5d6ff"Ta5d6ffPATHTa5d6ff"Tb4b4b4] Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff;Ta5d6ff" Tff7b72+ Ta5d6ff"Ta5d6ff;Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3pathsTb4b4b4)
Te6edf3not_supported Tff7b72= Tb4b4b4[Tb4b4b4] T8b949e# libraries that were found, but are not supported
Tff7b72for Te6edf3style Tff7b72in Te6edf3_windows_stylesTb4b4b4:
Te6edf3candidate Tff7b72= Te6edf3styleTff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)
Te6edf3library Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffutilTff7b72.Td2a8fffind_libraryTb4b4b4(Te6edf3candidateTb4b4b4)
Tff7b72if Te6edf3libraryTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3lib Tff7b72= Te6edf3ctypesTff7b72.Td2a8ffCDLLTb4b4b4(Te6edf3libraryTb4b4b4)
Tff7b72if Te6edf3tests Tff7b72and Tffa657allTb4b4b4(Te6edf3run_testsTb4b4b4(Te6edf3libTb4b4b4, Te6edf3testsTb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3lib
Te6edf3not_supportedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3libraryTb4b4b4)
Tff7b72except Tf85149WindowsErrorTb4b4b4:
Tff7b72pass
Tff7b72except Tf85149OSErrorTb4b4b4:
Te6edf3not_supportedTff7b72.Td2a8ffappendTb4b4b4(Te6edf3libraryTb4b4b4)
Tff7b72if Te6edf3not_supportedTb4b4b4:
Tff7b72raise Te6edf3ExternalLibraryErrorTb4b4b4(Ta5d6ff"Ta5d6fflibrary Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff couldnTa5d6ff'Ta5d6fft be loaded, because the following candidates were not supported:Ta5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72+ Tb4b4b4(Ta5d6ff"Tffea00\nTffd700{}Ta5d6ff" Tff7b72* Tffa657lenTb4b4b4(Te6edf3not_supportedTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffformatTb4b4b4(Tff7b72*Te6edf3not_supportedTb4b4b4)Tb4b4b4)
Tff7b72raise Te6edf3ExternalLibraryErrorTb4b4b4(Ta5d6ff"Ta5d6fflibrary Ta5d6ff'Tffd700{}Ta5d6ff'Ta5d6ff couldnTa5d6ff'Ta5d6fft be loadedTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3nameTb4b4b4)Tb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────